// never 表示那些用不存在值的类型
/**
 * never类型
 *  是那些总是会抛出异常
 *  或根本就不会有返回值的函数表达式
 *  变量也可能是never类型，当它们被永不为真的类型保护所约束
 * 
 * never可以是任何类型的子类型
 *  也可以赋值给任何类型
 *  但没有类型是never的子类型或可赋值给never类型
 */

//  返回never的函数必须存在无法到达的终点
function error(message: string): never {
  throw new Error(message)
}

// 推断的返回值类型为never
function fail() {
  return error('something failed')
}

// 返回never的函数必须存在无法到达的终点
function inifiniteLoop(): never {
  while(true) {}
}